package com.cskaoyan.javase.oop2._1extends._7initialization._2classload;

/**
 * 子类类加载和父类类加载的问题
 *
 * 一旦触发子类类加载,那么就从顶层父类开始,向下进行类加载
 * 体现在方法栈帧进栈上,就是从最顶层父类的clinit方法栈帧进栈,直到当前子类的clinit方法栈帧进栈执行
 * 思考:
 *      既然子类想要类加载,就会优先触发父类的类加载,那么这就是一种新的类加载时机:
 *      触发子类类加载,会优先类加载它的父类
 *      注意是只要触发子类类加载,就会优先类加载它的父类
 *      而不是光光new子类对象时,才能触发
 *
 * @since 10:01
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo extends Son {
    // static Son s = new Son();
    public static void main(String[] args) {
        // new Son();
        // System.out.println("hello world!");
        new A();
    }
}
class A{
    static B b = new B();
}
class B{
    static C c =new C();
}
class C{}
class Grandfather {
    static {
        System.out.println("gf");
    }
}

class Father extends Grandfather {
    static {
        System.out.println("f");
    }
}

class Son extends Father {
    static {
        System.out.println("s");
    }
}
